<html>
 <head>
  <meta charset="UTF-8">
 </head>
 <body>
  <h1 data-lake-id="beq3t" id="beq3t"><span data-lake-id="ub1766be4" id="ub1766be4">典型回答</span></h1>
  <p data-lake-id="uc49f31e9" id="uc49f31e9"><br></p>
  <p data-lake-id="u0d11e063" id="u0d11e063"><span data-lake-id="u12070a03" id="u12070a03">限流、降级和熔断是三种常用的系统稳定性策略，它们在高并发和高负载的场景下尤为重要。通常我们说为了保证系统的可用性，限流、降级、熔断一把梭，但是其实他们是三个不太相同的概念，作用也不太一样。</span></p>
  <p data-lake-id="u20e78d71" id="u20e78d71"><span data-lake-id="ubc2ef2ba" id="ubc2ef2ba">​</span><br></p>
  <h3 data-lake-id="U9JJy" id="U9JJy"><span data-lake-id="u935752f5" id="u935752f5">限流</span></h3>
  <p data-lake-id="u5308e9c4" id="u5308e9c4" style="text-align: left"><span data-lake-id="u3e91e6bf" id="u3e91e6bf">​</span><br></p>
  <p data-lake-id="u3c0b4c9a" id="u3c0b4c9a" style="text-align: left"><span data-lake-id="u5ccd6acc" id="u5ccd6acc">限流的目的是控制系统的并发流量，通过限制请求流量的手段防止过度的流量导致系统崩溃。</span><strong><span data-lake-id="u98df0900" id="u98df0900">一般用于应对突发流量高峰。</span></strong></p>
  <p data-lake-id="u80a75abd" id="u80a75abd" style="text-align: left"><strong><span data-lake-id="ue976d63c" id="ue976d63c">​</span></strong><br></p>
  <p data-lake-id="ucebf9a6d" id="ucebf9a6d" style="text-align: left"><strong><span data-lake-id="u6bde38f2" id="u6bde38f2">​</span></strong><br></p>
  <p data-lake-id="u8ceeca84" id="u8ceeca84" style="text-align: left"><span data-lake-id="uff5247fa" id="uff5247fa">一般是被调用方对调用方进行限流。举个例子，我提供了一个查询用户信息的服务，给集团内外的很多个调用方使用，但是我为了保证我的可用性，我会对每个调用方做限流，防止某个调用方不守规矩，把我的服务打挂了。</span></p>
  <p data-lake-id="ub64a9ec9" id="ub64a9ec9" style="text-align: left"><span data-lake-id="u6e7d9a6b" id="u6e7d9a6b">​</span><br></p>
  <blockquote data-lake-id="u0968f86a" id="u0968f86a">
   <p data-lake-id="u729f5cfa" id="u729f5cfa" style="text-align: left"><span data-lake-id="u770f51df" id="u770f51df">当然，也有在服务端给客户端直接做限流的，一般用于外部服务能力不太行的时候，比如电商网站大促的时候，可能会依赖很多银行的服务，但是银行服务本身可能没那么高的并发， 所以可能在电商网站上自己控制一下QPS，来起到限流的目的，避免下游系统被打挂</span></p>
  </blockquote>
  <p data-lake-id="u408bc7d1" id="u408bc7d1" style="text-align: left"><span data-lake-id="ue825ad9a" id="ue825ad9a">​</span><br></p>
  <h3 data-lake-id="CIjt2" id="CIjt2"><span data-lake-id="uc702f1c6" id="uc702f1c6">降级</span></h3>
  <p data-lake-id="u92e83295" id="u92e83295"><br></p>
  <p data-lake-id="u5202aa09" id="u5202aa09" style="text-align: left"><strong><span data-lake-id="u89811bc9" id="u89811bc9">降级</span></strong><span data-lake-id="uf03fd353" id="uf03fd353">是当系统负载过高时，主动关闭一些非核心功能，以确保核心功能的正常运行。一般用于在系统资源有限或响应时间过长时，通过降低服务质量保障核心服务。</span></p>
  <p data-lake-id="u24b87d1f" id="u24b87d1f" style="text-align: left"><span data-lake-id="u59eb7825" id="u59eb7825">​</span><br></p>
  <p data-lake-id="u5ad77585" id="u5ad77585" style="text-align: left"><span data-lake-id="u87220145" id="u87220145">​</span><br></p>
  <p data-lake-id="u14352e13" id="u14352e13" style="text-align: left"><span data-lake-id="u54d64d55" id="u54d64d55">举个例子，双十一大促期间，淘宝上面会把退款功能关闭，这就是一种降级手段，通过把一些非核心功能降级掉来保证核心功能可用。或者在某次腾讯视频挂了的时候，用户名称默认显示腾讯用户，这也是一种降级方式，用兜底名称做展示.</span></p>
  <p data-lake-id="u0329c82f" id="u0329c82f" style="text-align: left"><span data-lake-id="u315334ad" id="u315334ad">​</span><br></p>
  <p data-lake-id="ub2e2ffba" id="ub2e2ffba" style="text-align: left"><span data-lake-id="uf94753dc" id="uf94753dc">降级可以做在客户端，也可以做在服务端，比如关闭部分非核心功能的话，可以直接把入口关掉，及服务端直接下掉入口。也可以客户端直接返回兜底逻辑，不做业务逻辑处理起到降级的目的。</span></p>
  <h3 data-lake-id="nFAuT" id="nFAuT"><span data-lake-id="ua5ffc748" id="ua5ffc748">熔断</span></h3>
  <p data-lake-id="u8d3a9211" id="u8d3a9211"><br></p>
  <p data-lake-id="uab896429" id="uab896429"><strong><span data-lake-id="u8613f60e" id="u8613f60e">熔断</span></strong><span data-lake-id="u5ece0bda" id="u5ece0bda">是为了防止系统因某个服务的故障而整体崩溃，类似于电路的熔断器。在检测到下游服务异常时，自动停止向该服务发送请求，并在一定时间后尝试恢复。</span></p>
  <p data-lake-id="uc0d2444d" id="uc0d2444d"><span data-lake-id="u7674fe8b" id="u7674fe8b">​</span><br></p>
  <p data-lake-id="u3d891cbe" id="u3d891cbe"><span data-lake-id="ud039aff0" id="ud039aff0">​</span><br></p>
  <p data-lake-id="u8cec627c" id="u8cec627c"><span data-lake-id="u0ad08c72" id="u0ad08c72">熔断一般发生在调用方，举个例子，当电商平台上用户支付时，收银台发现某个支付渠道，如微信支付失败率突增，超时严重，那么就可以临时把这个支付方式熔断掉。</span></p>
  <p data-lake-id="u998503b1" id="u998503b1"><span data-lake-id="uaab4d516" id="uaab4d516">​</span><br></p>
  <p data-lake-id="u0d660f7d" id="u0d660f7d"><span data-lake-id="u848c9205" id="u848c9205">​</span><br></p>
  <table data-lake-id="z0ery" id="z0ery" margin="true" width-mode="contain" class="lake-table" style="width: 1000px">
   <colgroup>
    <col width="250">
    <col width="250">
    <col width="250">
    <col width="250">
   </colgroup>
   <tbody>
    <tr data-lake-id="u0aa5f899" id="u0aa5f899" style="height: 37px">
     <td data-lake-id="ud7496099" id="ud7496099"></td>
     <td data-lake-id="u4d4ddddf" id="u4d4ddddf">
      <p data-lake-id="uffe7024d" id="uffe7024d"><strong><span data-lake-id="u283f7437" id="u283f7437">限流</span></strong></p></td>
     <td data-lake-id="u294ffeb4" id="u294ffeb4">
      <p data-lake-id="u9d3258df" id="u9d3258df"><strong><span data-lake-id="u18596d7c" id="u18596d7c">降级</span></strong></p></td>
     <td data-lake-id="u039adda2" id="u039adda2">
      <p data-lake-id="u73b8c691" id="u73b8c691"><strong><span data-lake-id="u90e47d1b" id="u90e47d1b">熔断</span></strong></p></td>
    </tr>
    <tr data-lake-id="ubfd04f99" id="ubfd04f99">
     <td data-lake-id="uff4e3fc8" id="uff4e3fc8">
      <p data-lake-id="u1dd583b5" id="u1dd583b5"><strong><span data-lake-id="ud293045b" id="ud293045b">目的</span></strong></p></td>
     <td data-lake-id="uef8ca83e" id="uef8ca83e">
      <p data-lake-id="u39a2a0ba" id="u39a2a0ba"><span data-lake-id="u1b051eee" id="u1b051eee" class="lake-fontsize-12" style="color: rgb(55, 65, 81)">控制系统的流量，防止过度的流量导致系统崩溃。</span></p></td>
     <td data-lake-id="u38fde5b5" id="u38fde5b5">
      <p data-lake-id="ube8cb4fd" id="ube8cb4fd"><span data-lake-id="ud8b5e057" id="ud8b5e057" class="lake-fontsize-12" style="color: rgb(55, 65, 81)">主动关闭一些非核心功能，以确保核心功能的正常运行。</span></p></td>
     <td data-lake-id="u2e827876" id="u2e827876">
      <p data-lake-id="ub0892938" id="ub0892938"><span data-lake-id="u42c57d53" id="u42c57d53" class="lake-fontsize-12" style="color: rgb(55, 65, 81)">防止系统因某个服务的故障而整体崩溃，类似于电路的熔断器。</span></p></td>
    </tr>
    <tr data-lake-id="u90fb17d0" id="u90fb17d0">
     <td data-lake-id="u5f8b0076" id="u5f8b0076">
      <p data-lake-id="ue41ef1c9" id="ue41ef1c9"><strong><span data-lake-id="uf1554765" id="uf1554765">手段</span></strong></p></td>
     <td data-lake-id="u62a6f8ff" id="u62a6f8ff">
      <p data-lake-id="u48ce44b6" id="u48ce44b6"><span data-lake-id="ue145d6d1" id="ue145d6d1">各种限流算法：滑动窗口、漏桶、令牌桶</span></p></td>
     <td data-lake-id="u9aaf7225" id="u9aaf7225">
      <p data-lake-id="ub7bc6fa8" id="ub7bc6fa8"><span data-lake-id="uc243955d" id="uc243955d">开关；通过开关控制某些功能直接被降级。</span></p></td>
     <td data-lake-id="ub086e5cb" id="ub086e5cb">
      <p data-lake-id="u1699cdff" id="u1699cdff"><span data-lake-id="u5aaa7c1f" id="u5aaa7c1f">熔断器</span></p></td>
    </tr>
    <tr data-lake-id="u5ff688c5" id="u5ff688c5">
     <td data-lake-id="ud89cfa23" id="ud89cfa23">
      <p data-lake-id="u1e30ee2b" id="u1e30ee2b"><strong><span data-lake-id="ud2f29c1c" id="ud2f29c1c">工具</span></strong></p></td>
     <td data-lake-id="u1b9044a4" id="u1b9044a4">
      <p data-lake-id="ueb851758" id="ueb851758"><span data-lake-id="u61b039ea" id="u61b039ea">Sentinel</span></p></td>
     <td data-lake-id="u3fbafe0e" id="u3fbafe0e">
      <p data-lake-id="u01966dfd" id="u01966dfd"><span data-lake-id="uf7bd0e2f" id="uf7bd0e2f">Sentinel</span></p></td>
     <td data-lake-id="uf94bf9d4" id="uf94bf9d4">
      <p data-lake-id="uf32244c1" id="uf32244c1"><span data-lake-id="u114adb99" id="u114adb99">Sentinel</span></p></td>
    </tr>
    <tr data-lake-id="u0e854bb0" id="u0e854bb0">
     <td data-lake-id="uaba51048" id="uaba51048">
      <p data-lake-id="u29a34d22" id="u29a34d22"><strong><span data-lake-id="uef216eb3" id="uef216eb3">示例</span></strong></p></td>
     <td data-lake-id="u10afaee8" id="u10afaee8">
      <p data-lake-id="u21c0fa0a" id="u21c0fa0a"><span data-lake-id="ub63213cd" id="ub63213cd">我提供了一个查询用户信息的服务，给集团内外的很多个调用方使用，但是我为了保证我的可用性，我会对每个调用方做限流，防止某个调用方不守规矩，把我的服务打挂了。</span></p></td>
     <td data-lake-id="u43a9ed7c" id="u43a9ed7c">
      <p data-lake-id="u75d5bd16" id="u75d5bd16"><span data-lake-id="u7db74cdd" id="u7db74cdd">双十一大促期间，淘宝上面会把退款功能关闭</span></p>
      <p data-lake-id="u8b85a532" id="u8b85a532"><span data-lake-id="u8ed50262" id="u8ed50262">​</span><br></p>
      <p data-lake-id="u82be81a9" id="u82be81a9"><span data-lake-id="uebd4254f" id="uebd4254f">某次腾讯视频挂了的时候，用户名称默认显示腾讯用户，这也是一种降级方式，用兜底名称做展示</span></p></td>
     <td data-lake-id="u541a0e01" id="u541a0e01">
      <p data-lake-id="u102ec67f" id="u102ec67f"><span data-lake-id="uea9d3598" id="uea9d3598">当电商平台上用户支付时，收银台发现某个支付渠道，如微信支付失败率突增，超时严重，那么就可以临时把这个支付方式熔断掉。</span></p></td>
    </tr>
    <tr data-lake-id="u88365728" id="u88365728">
     <td data-lake-id="u88eb2417" id="u88eb2417">
      <p data-lake-id="u6c9f08c8" id="u6c9f08c8"><strong><span data-lake-id="u28dd3b70" id="u28dd3b70">发起方</span></strong></p></td>
     <td data-lake-id="u7c9a7925" id="u7c9a7925">
      <p data-lake-id="ue3864a1b" id="ue3864a1b"><span data-lake-id="ue872d878" id="ue872d878">被调用方（客户端）/调用方（服务端）</span></p></td>
     <td data-lake-id="udfabeb84" id="udfabeb84">
      <p data-lake-id="u1f91d65e" id="u1f91d65e"><span data-lake-id="uc01627fa" id="uc01627fa">被调用方（客户端）/调用方（服务端）</span></p></td>
     <td data-lake-id="ucd4e5f16" id="ucd4e5f16">
      <p data-lake-id="ua1955fad" id="ua1955fad"><span data-lake-id="ud503c74a" id="ud503c74a">调用方（服务端）</span></p></td>
    </tr>
   </tbody>
  </table>
  <p data-lake-id="ua53cfbfc" id="ua53cfbfc" style="text-align: left"><span data-lake-id="u682ff156" id="u682ff156">​</span><br></p>
 </body>
</html>